#include "HX711/HX711.h"


void HX711_Init()
{
    GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
    GPIO_InitTypeDef GPIO_InitStructure1; //定义GPIO初始化结构体

	RCC_APB2PeriphClockCmd(ADSK_PORT_RCC, ENABLE); //使能GPIO和复用外设时钟
    RCC_APB2PeriphClockCmd(ADDO_PORT_RCC, ENABLE); //使能GPIO和复用外设时钟
	
	GPIO_InitStructure.GPIO_Pin = ADDO_Pin;		  		//设置对应引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  		//设置上拉输入
	GPIO_Init(ADDO_PORT, &GPIO_InitStructure);			  		//设置生效

    GPIO_InitStructure1.GPIO_Pin = ADSK_Pin;		  		//设置对应引脚
	GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_Out_PP;  		//设置推挽输出
	GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz; 		//工作速度50MHz
	GPIO_Init(ADSK_PORT, &GPIO_InitStructure1);			  		//设置生效




    GPIO_ResetBits(ADDO_PORT, ADDO_Pin);				  		//默认低电平
	GPIO_ResetBits(ADSK_PORT, ADSK_Pin);				  		//默认低电平

}

//****************************************************
//读取HX711,对第一个交互力传感器
//****************************************************
unsigned long HX711_Read(void)	//增益128
{
	unsigned long count; 
	unsigned char i; 	
	
  	GPIO_ResetBits(ADSK_PORT, ADSK_Pin);//模块没准备好时，单片机在CLK线上输出低电平
  	count=0;
	
    while(GPIO_ReadInputDataBit(ADDO_PORT, ADDO_Pin));
    for(i=0;i<24;i++)
    {
        GPIO_SetBits(ADSK_PORT, ADSK_Pin);
        Delay_us(1);
        count=count<<1; 
        GPIO_ResetBits(ADSK_PORT, ADSK_Pin);
        if(GPIO_ReadInputDataBit(ADDO_PORT, ADDO_Pin)==1)//读入数据
		{
			count++; 
		}

    }
    GPIO_SetBits(ADSK_PORT, ADSK_Pin);
    Delay_us(2);
    count=count^0x800000;//第25个脉冲下降沿来时，转换数据
    GPIO_ResetBits(ADSK_PORT, ADSK_Pin);
    return(count);
	   
	
	
}


/* 主函数调用示例
 while(1)
    {
        showString(0,2,"G is:",FONT_16_EN);   
        showNumber(20,4,G,DEC,4,FONT_16_EN);
        G = HX711_Read();

        
        Delay_ms(100);
    }
    */


